/*
Copyright (C) 2022-2024 Inspur Corp. All Rights Reserved.

SPDX-License-Identifier: Apache-2.0
*/
package entity

import "time"

type AuthorityIssuer struct {
	Id               string    `json:"id" xorm:"varchar(36) not null "`
	WalletId         string    `json:"walletId" xorm:"varchar(36) not null"`
	Did              string    `json:"did" xorm:"varchar(64) not null"`
	Name             string    `json:"name" xorm:"varchar(64) not null"`
	ServiceType      string    `json:"serviceType" xorm:"varchar(64) not null"`
	Status           string    `json:"status" xorm:"char(1) not null"`
	ShortDescription string    `json:"shortDescription" xorm:"varchar(256) not null"`
	LongDescription  string    `json:"longDescription" xorm:"varchar(512) not null"`
	CreatedTime      time.Time `json:"createdTime" xorm:"timestamp not null"`
	UpdatedTime      time.Time `json:"updatedTime" xorm:"timestamp not null"`
	TxId             string    `json:"txId" xorm:"varchar(64) default null"`
}

type DidDocument struct {
	Id             string    `json:"id" xorm:"varchar(36) not null"`
	Did            string    `json:"did" xorm:"varchar(64) not null"`
	WalletId       string    `json:"walletId" xorm:"varchar(36) not null"`
	Version        string    `json:"version" xorm:"varchar(10) default null"`
	AuthPubKey     string    `json:"authPubKey" xorm:"varchar(256) default null"`
	RecoveryPubKey string    `json:"recoveryPubKey" xorm:"varchar(256) not null"`
	ProofCreator   string    `json:"proofCreator" xorm:"varchar(64) not null"`
	ProofType      string    `json:"proofType" xorm:"varchar(20) not null"`
	ProofSignature string    `json:"proofSignature" xorm:"varchar(64) not null"`
	Status         string    `json:"status" xorm:"char(1) not null"`
	Note           string    `json:"note" xorm:"varchar(512) default null"`
	TxId           string    `json:"txId" xorm:"varchar(64) default null"`
	CreatedTime    time.Time `json:"createdTime" xorm:"timestamp not null"`
	UpdatedTime    time.Time `json:"updatedTime" xorm:"timestamp not null"`
}

type DidDocumentKey struct {
	Id          string    `json:"id" xorm:"varchar(36) not null"`
	KeyId       string    `json:"keyId" xorm:"varchar(72) not null"`
	Type        string    `json:"type" xorm:"char(2) not null"`
	PubKey      string    `json:"pubKey" xorm:"varchar(256) not  null"`
	PrvKey      string    `json:"prvKey" xorm:"varchar(256) not  null"`
	CreatedTime time.Time `json:"createdTime" xorm:"timestamp not null"`
	UpdatedTime time.Time `json:"updatedTime" xorm:"timestamp not null"`
	Did         string    `json:"did" xorm:"varchar(64) not null"`
}

type DidWallet struct {
	Id          string    `json:"id" xorm:" varchar(36) notnull "`
	UserName    string    `json:"userName" xorm:" varchar(64) notnull"`
	Pwd         string    `json:"pwd" xorm:"varchar(256) notnull"`
	NickName    string    `json:"nickName" xorm:"varchar(64) notnull"`
	DeleteFlag  string    `json:"deleteFlag" xorm:" char(1) notnull"`
	Note        string    `json:"note" xorm:" varchar(512)"`
	CreatedTime time.Time `json:"createdTime" xorm:" timestamp notnull"`
	UpdatedTime time.Time `json:"updatedTime" xorm:" timestamp notnull"`
	UserType    string    `json:"userType" xorm:" char(1) notnull"`
}

type CredentialCpt struct {
	Id             string    `json:"id" xorm:" varchar(36) not null "`
	Title          string    `json:"title" xorm:" varchar(64) not null"`
	Description    string    `json:"description" xorm:"varchar(256) not null"`
	Type           string    `json:"type" xorm:"varchar(2) not null"`
	PublisherId    string    `json:"publisherId" xorm:"varchar(36) not null"`
	PublisherDid   string    `json:"publisherDid" xorm:" varchar(64) not null"`
	ProofType      string    `json:"proofType" xorm:" varchar(2) not null"`
	ProofSignature string    `json:"proofSignature" xorm:" varchar(512) not null"`
	CptVersion     int       `json:"cptVersion" xorm:" int(4) not null"`
	CreatedTime    time.Time `json:"createdTime" xorm:" timestamp not null"`
	UpdatedTime    time.Time `json:"updatedTime" xorm:" timestamp not null"`
	Status         string    `json:"status" xorm:" char(1) notnull"`
	TxId           string    `json:"txId" xorm:"varchar(64) default null"`
}

type CredentialCptClaim struct {
	Id          string    `json:"id" xorm:" varchar(36) notnull "`
	CptId       string    `json:"cptId" xorm:" varchar(64) notnull"`
	Property    string    `json:"property" xorm:"varchar(64) notnull"`
	ValueType   string    `json:"valueType" xorm:"varchar(2) notnull"`
	ValueEnum   string    `json:"valueEnum" xorm:" varchar(512)"`
	Seq         int       `json:"seq" xorm:" int(4) notnull"`
	Description string    `json:"description" xorm:" varchar(64) notnull"`
	Status      string    `json:"status" xorm:" char(1) notnull"`
	CreatedTime time.Time `json:"createdTime" xorm:" timestamp notnull"`
	UpdatedTime time.Time `json:"updatedTime" xorm:" timestamp notnull"`
}

type DidMenuAuth struct {
	Id          string    `json:"id" xorm:"varchar(36) not null"`
	UserType    string    `json:"userType" xorm:"char(1) not null"`
	MenuId      string    `json:"menuId" xorm:"varchar(36) not null"`
	CreatedTime time.Time `json:"createdTime" xorm:"timestamp not null"`
	UpdatedTime time.Time `json:"updatedTime" xorm:"timestamp not null"`
}

type DidMenu struct {
	Id          string    `json:"id" xorm:"varchar(36) not null"`
	ParentId    string    `json:"parentId" xorm:"varchar(36) not null"`
	MenuName    string    `json:"menuName" xorm:"varchar(32) not null"`
	MenuPath    string    `json:"menuPath" xorm:"varchar(128) not null"`
	MenuLevel   int       `json:"menuLevel" xorm:"int not null"`
	IsLeaf      string    `json:"isLeaf" xorm:"char(1) not null"`
	Seq         int       `json:"seq" xorm:"int not null"`
	MenuIcon    string    `json:"menuIcon" xorm:"varchar(36) not null"`
	CreatedTime time.Time `json:"createdTime" xorm:"timestamp not null"`
	UpdatedTime time.Time `json:"updatedTime" xorm:"timestamp not null"`
}

type CredentialGrant struct {
	Id             string    `json:"id" xorm:" varchar(36) pk not null "`
	OwnerDid       string    `json:"ownerDid" xorm:" varchar(64) not null"`
	Grantee        string    `json:"grantee" xorm:"varchar(64) not null"`
	ObjectId       string    `json:"objectId" xorm:"varchar(36) not null"`
	Allow          string    `json:"allow" xorm:" varchar(4) not null"`
	GrantDate      time.Time `json:"grantDate" xorm:" timestamp not null"`
	ExpirationDate time.Time `json:"expirationDate" xorm:" timestamp not null"`
	Signature      string    `json:"signature" xorm:"varchar(256) not null"`
	Secret         string    `json:"secret" xorm:"varchar(64)"`
	EncryptSecret  string    `json:"encryptSecret" xorm:"varchar(300)"`
	EncryptType    string    `json:"encryptType" xorm:"varchar(32) not null"`
	CreatedTime    time.Time `json:"createdTime" xorm:" timestamp not null"`
	UpdatedTime    time.Time `json:"updatedTime" xorm:" timestamp not null"`
	OwnerId        string    `json:"ownerId" xorm:" varchar(36) not null"`
}

type VerifiableCredential struct {
	Id                string    `json:"id" xorm:"varchar(36) not null"`
	Type              string    `json:"type" xorm:"type"`
	CptId             string    `json:"cptId" xorm:"varchar(36) not null"`
	IssuerId          string    `json:"issuerId" xorm:"varchar(36) not null"`
	IssuerDid         string    `json:"issuerDid" xorm:"varchar(64) not null"`
	OwnerId           string    `json:"ownerId" xorm:"varchar(64) NOT NULL"`
	OwnerDid          string    `json:"ownerDid" xorm:"varchar(64) not null"`
	IssuanceDate      string    `json:"issuanceDate" xorm:"timestamp NOT NULL"`
	ExpirationDate    string    `json:"expirationDate" xorm:"timestamp NOT NULL"`
	ChainStoreType    string    `json:"chainStoreType" xorm:"chain_store_type"`
	CredentialSubject string    `json:"credentialSubject" xorm:"varchar(256) not null"`
	RevocationId      string    `json:"revocationId" xorm:"varchar(256) not null"`
	RevocationType    string    `json:"revocationType" xorm:"revocation_type"`
	ProofCreator      string    `json:"proofCreator" xorm:"varchar(64) not null"`
	ProofType         string    `json:"proofType" xorm:"proof_type"`
	ProofSignature    string    `json:"proofSignature" xorm:"varchar(256) not null"`
	Status            string    `json:"status" xorm:"status"`
	TxId              string    `json:"txId"`
	CreatedTime       time.Time `json:"createdTime" xorm:"timestamp not null"`
	UpdatedTime       time.Time `json:"UpdatedTime" xorm:"timestamp not null"`
}

type VerifiableCredentialClaim struct {
	Id           string    `json:"id" xorm:"varchar(36) not null"`
	CredentialId string    `json:"credentialId" xorm:"varchar(36) not null"`
	Property     string    `json:"property" xorm:"varchar(64) not null"`
	Value        string    `json:"value" xorm:"varchar(256) NOT NULL"`
	ValueType    string    `json:"valueType" xorm:"value_type"`
	Seq          int       `json:"seq" xorm:"seq"`
	CreatedTime  time.Time `json:"createdTime" xorm:"timestamp not null"`
	UpdatedTime  time.Time `json:"UpdatedTime" xorm:"timestamp not null"`
}

type RevokedCredential struct {
	Id              string    `json:"id" xorm:"varchar(36) not null"`
	CredentialId    string    `json:"credentialId" xorm:"varchar(36) not null"`
	CptId           string    `json:"cptId" xorm:"varchar(36) not null"`
	Issuer          string    `json:"issuer" xorm:"varchar(64) not null"`
	RevokeDate      time.Time `json:"revokeDate" xorm:"timestamp not null"`
	RevokeReason    string    `json:"revokeReason" xorm:"varchar(256) not null"`
	RevokeSignature string    `json:"revokeSignature" xorm:"varchar(256) not null"`
	CreatedTime     time.Time `json:"createdTime" xorm:"timestamp not null"`
	UpdatedTime     time.Time `json:"updatedTime" xorm:"timestamp not null"`
}

type VerifiablePresentation struct {
	Id             string    `json:"id" xorm:"varchar(36) NOT NULL"`
	Name           string    `json:"name" xorm:"varchar(64) NOT NULL"`
	CredentialId   string    `json:"credentialId" xorm:"varchar(36) NOT NULL"`
	OwnerId        string    `json:"ownerId" xorm:"varchar(36) NOT NULL"`
	ChainStoreType string    `json:"chainStoreType" xorm:"NOT NULL"`
	TxId           string    `json:"txId" xorm:"varchar(64) NOT NULL"`
	Challenge      string    `json:"challenge" xorm:"varchar(128) NOT NULL"`
	Domain         string    `json:"domain" xorm:"varchar(256) NOT NULL"`
	ProofCreator   string    `json:"proofCreator" xorm:"varchar(72) NOT NULL"`
	ProofType      string    `json:"proofType" xorm:"NOT NULL"`
	ProofSignature string    `json:"proofSignature" xorm:"varchar(256) NOT NULL"`
	Status         string    `json:"status" xorm:"NOT NULL"`
	CreatedTime    time.Time `json:"createdTime" xorm:"timestamp NOT NULL"`
	UpdatedTime    time.Time `json:"updatedTime" xorm:"timestamp NOT NULL"`
}

type VpAdditionalInfo struct {
	Id          string    `json:"id" xorm:"varchar(36) NOT NULL"`
	VpId        string    `json:"vpId" xorm:"varchar(36) NOT NULL"`
	InfoName    string    `json:"infoName" xorm:"varchar(36) NOT NULL"`
	InfoValue   string    `json:"infoValue" xorm:"varchar(36) NOT NULL"`
	Seq         int       `json:"seq" xorm:"NOT NULL"`
	CreatedTime time.Time `json:"createdTime" xorm:"timestamp NOT NULL"`
	UpdatedTime time.Time `json:"updatedTime" xorm:"timestamp NOT NULL"`
}

type DidChainConsenser struct {
	Id          string    `json:"id" xorm:"varchar(36) not null"`
	Name        string    `json:"name" xorm:"varchar(64) not null"`
	Host        string    `json:"host" xorm:"varchar(32) not null"`
	Port        string    `json:"port" xorm:"varchar(10) not null"`
	CreatedTime time.Time `json:"createdTime" xorm:"timestamp not null"`
	UpdatedTime time.Time `json:"updatedTime" xorm:"timestamp not null"`
}

type DidChainOrg struct {
	Id          string    `json:"id" xorm:"varchar(36) not null"`
	OrgName     string    `json:"orgName" xorm:"varchar(64) not null"`
	IamId       string    `json:"iamId" xorm:"varchar(64) not null"`
	CryptoPath  string    `json:"cryptoPath" xorm:"varchar(256) not null"`
	CreatedTime time.Time `json:"createdTime" xorm:"timestamp not null"`
	UpdatedTime time.Time `json:"updatedTime" xorm:"timestamp not null"`
}

type DidChainNode struct {
	Id          string    `json:"id" xorm:"varchar(36) not null"`
	OrgId       string    `json:"orgId" xorm:"varchar(36) not null"`
	Name        string    `json:"name" xorm:"varchar(64) not null"`
	Host        string    `json:"host" xorm:"varchar(32) not null"`
	Port        string    `json:"port" xorm:"varchar(10) not null"`
	CreatedTime time.Time `json:"createdTime" xorm:"timestamp not null"`
	UpdatedTime time.Time `json:"updatedTime" xorm:"timestamp not null"`
}

type DidChainUser struct {
	Id          string    `json:"id" xorm:"varchar(36) not null"`
	PrvKey      string    `json:"orgId" xorm:"varchar(2048) not null"`
	Cert        string    `json:"name" xorm:"varchar(2048) not null"`
	CreatedTime time.Time `json:"createdTime" xorm:"timestamp not null"`
	UpdatedTime time.Time `json:"updatedTime" xorm:"timestamp not null"`
}

type DidApiKey struct {
	Id          string    `json:"id" xorm:"varchar(36) not null"`
	WalletId    string    `json:"walletId" xorm:"varchar(36) not null"`
	ApiKey      string    `json:"apiKey" xorm:"varchar(36) not null"`
	ApiSecret   string    `json:"apiSecret" xorm:"varchar(128) not null"`
	PrvKey      string    `json:"prvKey" xorm:"varchar(256) not null"`
	PubKey      string    `json:"pubKey" xorm:"varchar(256) not null"`
	Status      string    `json:"status" xorm:"char(1) not null"`
	CreatedTime time.Time `json:"createdTime" xorm:"timestamp not null"`
	UpdatedTime time.Time `json:"updatedTime" xorm:"timestamp not null"`
}
